package client.gui;

import java.awt.Color;
import java.awt.Font;

import javax.swing.*;

/**
 * 
 * permet la gestion d'une chaise et des infos du joueur a afficher
 * 
 */
@SuppressWarnings("serial")
public class Chaise extends JButton implements infos, choixCartes {
	/**
	 * l'image des jetons et la somme pariee
	 */
	private JLabel jetons;
	/**
	 * le jeton du dealer
	 */
	private JLabel dealer;
	/**
	 * le nom du joueur
	 */
	private JLabel nom;
	/**
	 * le montant qui lui reste
	 */
	private JLabel montant;
	/**
	 * l'action du joueur
	 */
	private JLabel action;
	/**
	 * la 1ere carte sur la table
	 */
	private Carte carte1;
	/**
	 * la 2emme carte sur la table
	 */
	private Carte carte2;
	/**
	 * si la chaise est libre ou pas
	 */
	private boolean chaiseLibre = true;
	/**
	 * l'image de la chaise libre
	 */
	private ImageIcon imgLibre;
	/**
	 * l'image de la chaise occupee
	 */
	private ImageIcon imgAssis;
	/**
	 * l'image des jetons
	 */
	private ImageIcon imgJetons;
	/**
	 * l'image du jeton du dealer
	 */
	private ImageIcon imgDealer;
	/**
	 * la table autour de laquel se trouve la chaise
	 */
	TableDeJeu table;

	/**
	 * construit la chaise autour de la table avec toutes les infos du joueur
	 * 
	 * @param table
	 *            autour de laquel se trouve la chaise
	 * @param x
	 *            est la position en x de la chaise autour de la table
	 * @param y
	 *            est la position en y de la chaise autour de la table
	 * @param position
	 *            l'"angle" de la chaise par rapport a la table
	 */
	public Chaise(TableDeJeu table, int x, int y, int position, String joueur) {
		this.table = table;
		ClassLoader cldr = this.getClass().getClassLoader();
		java.net.URL imageURL = cldr.getResource("chaise.png");
		imgLibre = new ImageIcon(imageURL);
		// imageURL = cldr.getResource("joueurAssis.png");
		System.out.println(joueur);
		imageURL = cldr.getResource(joueur + ".png");
		imgAssis = new ImageIcon(imageURL);
		imageURL = cldr.getResource("jetonsPetit.png");
		imgJetons = new ImageIcon(imageURL);
		imageURL = cldr.getResource("dealer.png");
		imgDealer = new ImageIcon(imageURL);
		setIcon(imgLibre);
		setHorizontalTextPosition(SwingConstants.CENTER);
		setVerticalTextPosition(SwingConstants.CENTER);
		setLocation(x, y);
		setOpaque(true);
		setSize(imgLibre.getIconWidth(), imgLibre.getIconHeight());
		jetons = new JLabel();
		jetons = new JLabel();
		jetons.setIcon(imgJetons);
		table.add(jetons);
		dealer = new JLabel();
		dealer.setIcon(imgDealer);
		table.add(dealer);
		jetons.setVisible(false);
		dealer.setVisible(false);
		carte1 = new Carte();
		table.add(carte1);
		carte1.setVisible(false);
		carte2 = new Carte();
		table.add(carte2);
		carte2.setVisible(false);
		nom = new JLabel();
		nom.setForeground(AVANT_PLAN);
		nom.setBackground(ARRIERE_PLAN);
		nom.setVisible(true);
		nom.setSize(70, 25);
		table.add(nom);
		montant = new JLabel();
		montant.setForeground(AVANT_PLAN);
		montant.setBackground(ARRIERE_PLAN);
		montant.setVisible(true);
		montant.setSize(70, 25);
		table.add(montant);
		action = new JLabel();
		action.setForeground(AVANT_PLAN);
		action.setBackground(ARRIERE_PLAN);
		action.setVisible(true);
		action.setSize(70, 25);
		table.add(action);
		setinfoLocation(position);
	}

	/**
	 * permet de poser les element du joueur sur la table
	 * 
	 * @param position
	 *            est la position de la chaise autour de la table
	 */
	private void setinfoLocation(int position) {
		switch (position) {
		case 0:
			jetons.setBounds(getLocation().x + 100, getLocation().y, 150, 100);
			jetons.setHorizontalTextPosition(SwingConstants.CENTER);
			jetons.setVerticalTextPosition(SwingConstants.BOTTOM);
			dealer.setBounds(getLocation().x + 100, getLocation().y + 30, 150,
					100);
			carte1.setLocation(getLocation().x + 100, getLocation().y - 10);
			carte2.setLocation(getLocation().x + 127, getLocation().y - 10);
			nom.setLocation(getLocation().x, getLocation().y - 50);
			montant.setLocation(getLocation().x, getLocation().y - 25);
			action.setLocation(getLocation().x, getLocation().y + 80);
			break;
		case 90:
			jetons.setBounds(getLocation().x + 30, getLocation().y - 90, 150,
					100);
			jetons.setHorizontalTextPosition(SwingConstants.CENTER);
			jetons.setVerticalTextPosition(SwingConstants.TOP);
			dealer.setBounds(getLocation().x + 80, getLocation().y - 70, 150,
					100);
			carte1.setLocation(getLocation().x - 27, getLocation().y - 55);
			carte2.setLocation(getLocation().x, getLocation().y - 55);
			nom.setLocation(getLocation().x + 80, getLocation().y);
			montant.setLocation(getLocation().x + 80, getLocation().y + 25);
			action.setLocation(getLocation().x + 80, getLocation().y + 50);
			break;
		case 180:
			jetons.setBounds(getLocation().x - 70, getLocation().y - 20, 150,
					100);
			jetons.setHorizontalTextPosition(SwingConstants.CENTER);
			jetons.setVerticalTextPosition(SwingConstants.BOTTOM);
			dealer.setBounds(getLocation().x - 30, getLocation().y - 50, 150,
					100);
			carte1.setLocation(getLocation().x - 50, getLocation().y + 50);
			carte2.setLocation(getLocation().x - 77, getLocation().y + 50);
			nom.setLocation(getLocation().x, getLocation().y - 50);
			montant.setLocation(getLocation().x, getLocation().y - 25);
			action.setLocation(getLocation().x, getLocation().y + 80);
			break;
		case 270:
			jetons.setBounds(getLocation().x + 10, getLocation().y + 70, 150,
					100);
			jetons.setHorizontalTextPosition(SwingConstants.CENTER);
			jetons.setVerticalTextPosition(SwingConstants.BOTTOM);
			dealer.setBounds(getLocation().x - 5, getLocation().y + 50, 150,
					100);
			carte1.setLocation(getLocation().x + 63, getLocation().y + 100);
			carte2.setLocation(getLocation().x + 90, getLocation().y + 100);
			nom.setLocation(getLocation().x + 80, getLocation().y);
			montant.setLocation(getLocation().x + 80, getLocation().y + 25);
			action.setLocation(getLocation().x + 80, getLocation().y + 50);
			break;
		}

	}

	/**
	 * permet de pouvoir choisir la chaise si elle est pas deja prise
	 * 
	 * @param choisir
	 *            permet d'activer la possibilite de choisir ou desactive cette
	 *            possibilite
	 */

	public void setChoixChaise(boolean choisir) {
		if (choisir && chaiseLibre) {
			setText("Libre");
			removeActionListener(table);
			addActionListener(table);
		} else {
			setText("");
			removeActionListener(table);
		}
	}

	/**
	 * permet de mettre les infos du joueur
	 * 
	 * @param nom
	 *            est le pseudo du joueur(nom a "" pour liberer la chaise)
	 * @param montant
	 *            est l'argent qu'il a
	 */
	public void setInfos(String nom, double montant) {
		chaiseLibre = (nom.isEmpty());
		if (!nom.isEmpty()) {
			setChoixChaise(chaiseLibre);
			if (nom.length() > 11) {
				Font f = new Font("ARIAL", Font.PLAIN, 10);
				this.nom.setFont(f);
				System.out.println("text petit");
			} else {
				Font f = new Font("ARIAL", Font.PLAIN, 12);
				this.nom.setFont(f);
			}
			setToolTipText(nom);
			this.nom.setText(nom);
			this.montant.setText(montant + DEVISE);
			if(getIcon()!=imgAssis)
				setIcon(imgAssis);
		} else {
			setIcon(imgLibre);
			setToolTipText(null);
			setText(nom);
			this.nom.setText(nom);
			this.montant.setText(nom);
			this.action.setText(nom);
		}
	}

	/**
	 * permet d'afficher le jeton du dealer
	 * 
	 * @param visible
	 *            doit etre a true pour afficher le jeton du dealer
	 */
	public void setDealer(boolean visible) {
		dealer.setVisible(visible);
	}

	/**
	 * permet d'afficher ou cacher le montant mise
	 * 
	 * @param montant
	 *            est le montant mise
	 * @param visible
	 *            permet de l'afficher ou non
	 */
	public void setMontantMise(double montant, boolean visible) {
		jetons.setVisible(visible);
		jetons.setText(montant + DEVISE);
	}

	/**
	 * permet de mettre sur le joueur l'action faite
	 * 
	 * @param action
	 *            est l'action a afficher
	 */
	public void setAction(String action) {
		this.action.setText(action);
		if (action.equals("joue"))
			setBorder(BorderFactory.createMatteBorder(4, 4, 4, 4, Color.red));
		else if (action.equals("GAGNANT!!!"))
			setBorder(BorderFactory.createMatteBorder(4, 4, 4, 4, Color.green));
			else
				setBorder(null);
	}

	/**
	 * permet de mettre les cartes de la chaise sur la table
	 * 
	 * @param carte1
	 *            est la 1ere carte
	 * @param carte2
	 *            est la 2emme carte
	 */
	public void setCartes(String carte1, String carte2) {
		this.carte1.setImage(carte1, PETITE);
		this.carte1.setVisible(true);
		this.carte2.setImage(carte2, PETITE);
		this.carte2.setVisible(true);
		validate();
		repaint();
	}

	/**
	 * permet de retirer les cartes de la table
	 */
	public void retirerCartes() {
		carte1.setVisible(false);
		carte2.setVisible(false);
		table.validate();
		table.repaint();
	}

	/**
	 * permet de savoir si la chaise est libre
	 * 
	 * @return true si la chaise est libre
	 */
	public boolean estLibre() {
		return chaiseLibre;
	}

	/**
	 * permet de modiffier le montant du solde restant pour le joueur
	 * 
	 * @param montant
	 *            est le nouveau solde
	 */
	public void setMontantRestant(double montant) {
		this.montant.setText(montant + DEVISE);
	}

}